/**
 * @properties={typeid:24,uuid:"F2958A0E-72D3-4611-85AC-E0033927513E"}
 */
function pruebaFormDS() {
	var maxReturnedRows = 100;//useful to limit number of rows
	var query = 'select customerid, orderdate,employeeid,shipname,shipaddress,shipcity from orders where employeeid > ?';//do not use '.' or special chars in names or aliases if you want to access data by name
	var args = [1];
	var dataset = databaseManager.getDataSetByQuery('example_data', query, args, maxReturnedRows);
	var titulos = new Array ('Cliente','Fecha','Empleado','Envio','Direccion','Ciudad')
	var tipos = new Array (JSColumn.TEXT,JSColumn.DATETIME,JSColumn.INTEGER,JSColumn.TEXT,JSColumn.TEXT,JSColumn.TEXT)
	if (globals.formDS(dataset,tipos,'LISTADO DE ORDENES','NORMAL', titulos, 'formDataset','DATASET') == false)
		application.output('FALSE')
}

/**
 * @param {JSDataSet} ds = dataset con datos
 * @param {Array} tipos = arreglo con los tipos de las columnas del DS
 * @param {String} titulo = titulo a la tabla
 * @param {String} modo  NORMAL / DIALOG / PREVIEW = modo de mostrar el form creado
 * @param {Array<String>} [titulos]
 * @param {String} [nombreForm]
 * @param {String} [nombreDs]
 * @param {String} [estilo]
 * @param {Array<String>} [valuelists]
 * 
 * @return {Object}
 * @properties={typeid:24,uuid:"704B42FE-4037-49F2-BB51-E4E2EDE0A77E"}
 */
function formDS(ds,tipos,titulo,modo,titulos, nombreForm, nombreDs, estilo, valuelists) {
	// 2 Lineas necesarias para poder crear el form luego
	history.removeForm(nombreForm)
	solutionModel.removeForm(nombreForm)
	if ((ds != null) && (tipos != null))
	{
		//Creo un datasource necesario para crear un form
		if (!nombreDs)
			nombreDs = 'DATA_001'
		var data = ds.createDataSource(nombreDs,tipos)
		if (titulo)
			var $alto = 60
		else
			var $alto = 40
		//Creo un form basico
		var frm = solutionModel.newForm( nombreForm,  data,  null, false,  600, $alto)
		//Le pongo que sea en forma de tabla
		frm.view = JSForm.LOCKED_TABLE_VIEW
		if (estilo)
			frm.styleName = estilo
		frm.newHeaderPart($alto - 20)
		var x = 0
		//Por cada columna en el dataset creo un campo asociado
		for (var i = 1; i<=ds.getMaxColumnIndex(); i++)
		{
			var f = frm.newField(ds.getColumnName(i),JSField.TEXT_FIELD,x,$alto-19,100,20)
			if (titulos == null)
				var title = ds.getColumnName(i)
			else
				var title = titulos[i-1]
			
			if ((tipos [i-1] == JSColumn.INTEGER) || (tipos [i-1] == JSColumn.NUMBER))
			{
				if (tipos [i-1] == JSColumn.INTEGER)
				{
					if (valuelists[i-1])
					{
						f.width 	= 120
						f.valuelist = solutionModel.getValueList(valuelists[i-1])
					}
					else
					{
						f.width = 50
						f.horizontalAlignment = SM_ALIGNMENT.RIGHT
					}
				}
				else
				{
					f.format = '###,###,###,###,###.00'
					f.horizontalAlignment = SM_ALIGNMENT.RIGHT
				}
				
			}
			else
				if (tipos [i-1] == JSColumn.TEXT)
					f.width = 120
				else
				{
					f.width = 60
					f.format = 'dd-MM-yyyy'
				}
			f.anchors 	= SM_ANCHOR.EAST | SM_ANCHOR.WEST
			f.editable 	= false
			f.name 		= 'fld_'+ ds.getColumnName(i)
			f.titleText = title
			
			var l = frm.newLabel(title,x,$alto-40,f.width,20)
			l.transparent 			= true
			l.horizontalAlignment 	= f.horizontalAlignment
			l.name 					= 'lbl_'+ ds.getColumnName(i)
			
			x += f.width 
		}
		
		//Si los elementos son mayores al ancho, muestro en "landscape"
		if (x > 550)
		{
			var ancho = 843.75
			var mg_ancho = (ancho - x)/2
			frm.defaultPageFormat = "0;596.59;"+ancho+";64.29;"+mg_ancho+";468.0;"+x
		}
		//Muestro un titulo si lo pasaron por parametro
		if (titulo != null)
		{
			var lbl = frm.newLabel(titulo,(x/2)-200,0,500,20)
			lbl.fontType = 'Tahoma,bold,16'
			lbl.transparent = true
		}

		//Muestro el form en un dialog	
		if (modo == 'DIALOG')
		{
			var $win = application.createWindow('FORMDS',JSWindow.MODAL_DIALOG)
			forms[nombreForm].controller.show($win)
		}
		else
			if (modo == 'PREVIEW')
				forms[nombreForm].controller.showPrintPreview()
			else
				if (modo == 'NORMAL')
					forms[nombreForm].controller.show()
				else
					return nombreForm
		return true
	}
	else
		//Devuelvo que hubo un error al pasar los parametros
		return false
}

/**
 * @param {String) server = nombre del servidor de la tabla
 * @param (String) table = nombre de la tabla que quiero mostrar
 * @param (Array<String>) columnas = columnas a mostrar
 * @param (String) titulo = titulo a la tabla
 * @param (String) modo = NORMAL / DIALOG / PREVIEW = modo de mostrar el form creado
 * 
 * @return {Object}
 * @properties={typeid:24,uuid:"A48FB804-D590-4B9A-9F1C-B18E2763BDD9"}
 */
function formTabla(server,table, columnas, titulo, modo) {
	// 2 Lineas necesarias para poder crear el form luego
	history.removeForm('p')
	solutionModel.removeForm('p')
	
	if ((table != null)&&(server != null))
	{
		var tabla = databaseManager.getTable( server,  table)
		//Si no me pasaron el parametro, creo un arreglo para obtener los nombres de las columnas de la tabla que obtuve
		if (columnas == null)
			columnas = tabla.getColumnNames()
		//Creo un data set vacio
		var ds = databaseManager.createEmptyDataSet()
		//Creo arreglo para obtener el tipo de cada columna
		var tipos = new Array()
		 
		//Por cada columna que hay en la tabla creo una columna en el dataset y obtengo su tipo
		for (var i = 0; i < columnas.length; i++) 
		{
			ds.addColumn(columnas[i])
			var col = tabla.getColumn(columnas[i])
			tipos[i] = col.getType()
		}
		//Obtengo la cantidad de registros en la tabla
		var cantReg = databaseManager.getTableCount(tabla)
		//Obtengo un foundset de la tabla
		var fs = databaseManager.getFoundSet( server,table)
		fs.loadAllRecords()
		//Por cada registro, doy de alta una fila en el dataset y lleno las columnas
		for (var j = 1; j <= cantReg; j++) 
		{
			fs.setSelectedIndex(j)
			ds.addRow(j,new Array())
			for (var i = 0; i < columnas.length; i++)
			{
			    var val = fs.getDataProviderValue(columnas[i])
			    ds.setValue(j,i+1,val)
			}
		}
		//Creo un datasource necesario para crear un form
		var uri = ds.createDataSource('test',tipos)
		//Creo un form basico
		var jsform = solutionModel.newForm('p', uri, null, true, 300, 60);
		//Le pongo que sea en forma de tabla
		jsform.view = JSForm.LOCKED_TABLE_VIEW
		
		var x = 0
		//Por cada columna creo un campo asociado
		for (var i = 0; i < columnas.length; i++) 
		{
			var f = jsform.newField(columnas[i],JSField.TEXT_FIELD,x,41,100,20)
			f.titleText = columnas[i]
			                       
			if ((tipos [i] == JSColumn.INTEGER) || (tipos [i] == JSColumn.NUMBER))
			{
				if (tipos [i] == JSColumn.INTEGER)
					f.width = 40
				else
					f.format = '###.###.###.###.###,00'
				f.horizontalAlignment = SM_ALIGNMENT.RIGHT
			}
			else
				if (tipos [i] == JSColumn.TEXT)
					f.width = 120
				else
				{
					f.width = 60
					f.format = 'dd-MM-yyyy'
				}
			 f.anchors = SM_ANCHOR.EAST | SM_ANCHOR.WEST
			 x+= f.width 
		}
		
		//Si los elementos son mayores al ancho, muestro en "landscape"
		if (x > 550)
		{
			var ancho = 843.75
			var mg_ancho = (ancho - x)/2
			jsform.defaultPageFormat = "1;"+ancho+";596.59;"+mg_ancho+";64.29;"+x+";468.0"
		}
		
		//Muestro un titulo si lo pasaron por parametro
		if (titulo != null)
		{
			jsform.newTitleHeaderPart(40)
			var lbl = jsform.newLabel(titulo,100,0,500,30)
			lbl.fontType = 'Tahoma,bold,18'
			lbl.transparent = true
		}
		jsform.dataSource = uri
		forms['p'].controller.recreateUI()
		//Muestro el form creado segun el parametro "modo"
		if (modo == 'DIALOG')
		{
			var $win = application.createWindow('FORMTABLA',JSWindow.MODAL_DIALOG)
			forms['p'].controller.show($win)
		}
		else
			if (modo == 'PREVIEW')
				forms['p'].controller.showPrintPreview ()
			else
				if (modo == 'NORMAL')
					forms['p'].controller.show()
				else
					return 'p'
		return true
	}
	else
		return false
}

/**
 *
 * @properties={typeid:24,uuid:"266C6537-4264-4CB1-8A67-ACEC925B7452"}
 */
function pruebaFormTabla() {
	var cols = new Array('customerid', 'orderdate','employeeid','shipname','shipaddress','shipcity')
	if (globals.formTabla('example_data','orders',cols,'LISTADO DE ORDENES','NORMAL')==false)
		application.output('FALSE')
}
